
/**
 * @info    Klasse, welke betalingen afhandeld t.b.v. de Kantine Simulatie
 * @author  (Stephan Veenstra, Michel Jansma) 
 * @version (1.6)
 */

public class Canteen {

    //Klasse variabelen definiëren van het type CheckoutLine
    private CheckoutLine line;
    //Klasse variabelen definiëren van het type Checkout
    private Checkout checkout;

    public Canteen() {
        //Klasse variabele checkout initialiseren
        this.line     = new CheckoutLine();
        //Klasse variabele checkout initialiseren
        this.checkout = new Checkout(this.line);
    }
    
    /**
     * @method personGetTrayConnectLine
     * @params null
     * @info   [ Maakt een persoon, dienblad en artikelen aan, 
     *         waarna het dienblad gevuld wordt met artikelen en de 
     *         persoon in de rij gaat staan van de kassa ]
     * @return null
     */
    public void personGetTrayConnectLine() {
        //Variabele aanmaken van het type Person
        Person person  = new Person(
            12345, //<int> BSN number
            "Jan-Jaap", //<String> Firstname
            "Woltersen",  //<String> Lastname
            'M', //<char> Gender 
            new int[]{21,9,1990} //<int[]> dateOfBirth
        );
        //Variabelen aanmaken van het type Article
        Article apple = new Article(1.25, "Appel");
        Article pear  = new Article(2.33, "Peer");
        //Variabele aanmaken van het type tray
        Tray tray     = new Tray();
        //Koppelen dienblad aan persoon
        person.setTray(tray);
        //Voeg artikelen toe aan dienblad
        person.setArticle(apple);
        person.setArticle(pear);
        //Persoon gaat in de rij staan
        this.line.addToLine(person);
    }
    
    /**
     * HANDLE METHODES
     */
    
    /**
     * @method handleCheckoutLine
     * @params null
     * @info   Kassarij afwerken
     * @return null
     */
    public void handleCheckoutLine() {
        while(this.line.getLine()) {
            this.checkout.payBil(this.line.removeFirstPersonLine());
        }
    }
    
    /**
     * GETTER METHODES
     */
    
    /**
     * @method getCheckoutArticles
     * @params null
     * @info   Retourneer het aantal artikelen, welke voorbij de kassa zijn gekomen
     * @return <int> checkoutArticles
     */
    public int getCheckoutArticles() {
        return this.checkout.getCheckoutArticles();
    }
    
    /**
     * @method getCheckoutContent
     * @params null
     * @info   Retourneer de kassainhoud
     * @return <double> checkoutContent
     */
    public double getCheckoutContent() {
        return this.checkout.getCheckoutContent();
    }
    
    /**
     * @method resetCheckout
     * @params null
     * @info   Kassa legen en geschiedenis verwijderen
     * @return null
     */
    public void resetCheckout() {
        this.checkout.resetCheckout();
    }
   
}
